﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace Persistency.DataAccess
{
	/// <summary>
	/// <see cref="DataAccessException"/> ist die Basisklasse aller Ausnahmen,
	/// die von der Datenzugriffsschicht (Data Access Layer, DAL) geworfen
	/// werden.
	/// </summary>
	[Serializable]
	public class DataAccessException : Exception, ISerializable
	{
		/// <summary>
		/// Initialisiert eine neue Instanz der
		/// <see cref="DataAccessException"/>-Klasse.
		/// </summary>
		public DataAccessException()
		{
		}

		/// <summary>
		/// Initialisiert eine neue Instanz der
		/// <see cref="DataAccessException"/>-Klasse mit einer angegebenen
		/// Fehlermeldung.
		/// </summary>
		/// <param name="message">Die Meldung, in der der Fehler beschrieben
		/// wird.</param>
		public DataAccessException(string message)
			: base(message)
		{
		}

		/// <summary>
		/// Initialisiert eine neue Instanz der
		/// <see cref="DataAccessException"/>-Klasse mit einer angegebenen
		/// Fehlermeldung und einem Verweis auf die innere Ausnahme, die diese
		/// Ausnahme ausgelöst hat.
		/// </summary>
		/// <param name="message">Die Fehlermeldung, in der die Ursache der
		/// Ausnahme erklärt wird.</param>
		/// <param name="innerException">Die Ausnahme, die Ursache der aktuellen
		/// Ausnahme ist. Wenn der <paramref name="innerException"/>-Parameter
		/// kein <see langword="null"/>-Verweis ist, wird die aktuelle Ausnahme
		/// in einem <see langword="catch"/>-Block ausgelöst, der die
		/// innere Ausnahme behandelt.</param>
		public DataAccessException(string message, Exception innerException)
			: base(message, innerException)
		{
		}

		/// <summary>
		/// Initialisiert eine neue Instanz der
		/// <see cref="DataAccessException"/>-Klasse mit serialisierten
		/// Daten.
		/// </summary>
		/// <param name="info">Das Objekt, das die serialisierten Objektdaten
		/// für die ausgelöste Ausnahme enthält.</param>
		/// <param name="context">Die Kontextinformationen über die Quelle oder
		/// das Ziel.</param>
		protected DataAccessException(SerializationInfo info,
		    StreamingContext context)
			: base(info, context)
		{
		}
	}
}
